﻿using System;

namespace WeatherAggregator.WeatherSources
{

	/// <summary>
	/// Интерфейс источника данных для агрегатора.
	/// </summary>
	public interface IWeatherDataSource
	{
		WeatherDataSourceRespond GetNewData();
		//Boolean HasNewData(DateTime since);

		/// <summary>
		///  Идентификатор источника данных для записи в базу
		/// </summary>
		String SourceId { get; }

		/// <summary>
		///  Название точки, из которой ведутся измерения. Наприер, название города или метеостанции.
		/// </summary>
		String PointName { get; }

		/// <summary>
		///  Дата, события до которой не будут считаться нужными, даже если в источнике даных они есть
		/// </summary>
		DateTimeOffset LastGatheredData { get; set; }
	}

	public struct WeatherDataSourceRespond
	{
		public WeatherDataEntry[] Data;
		public TimeSpan RecommendedDelay;
	}

	public abstract class BaseWeatherDataSource : IWeatherDataSource
	{
		public abstract WeatherDataSourceRespond GetNewData();

		public virtual Boolean HasNewData(DateTime since)
		{
			return true;
		}

		protected WeatherDataEntry CreateDataEntry()
		{
			return new WeatherDataEntry {SourceId = SourceId, CityName = PointName};
		}

		public String SourceId { get; protected set; }
		public String PointName { get; set; }
		public DateTimeOffset LastGatheredData { get; set; }
	}
}

